package com.gitee.zycra.union.api.manager;

import com.gitee.zycra.union.api.common.model.ApiUserGroup;
import com.gitee.zycra.union.api.common.util.IdGenerator;
import com.gitee.zycra.union.api.common.vo.ProjectGroupVO;
import com.gitee.zycra.union.api.common.vo.UserAuthVO;
import com.gitee.zycra.union.api.common.vo.UserInfoVO;
import com.gitee.zycra.union.api.dao.ApiProjectDao;
import com.gitee.zycra.union.api.dao.ApiUserGroupDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author zycra
 */
@Component
public class ApiUserGroupManager {

    @Autowired
    private ApiUserGroupDao apiUserGroupDao;

    @Autowired
    private ApiProjectDao apiProjectDao;

    @Autowired
    private IdGenerator idGenerator;

    /**
     * 插入
     *
     * @param apiUserGroup 用户对象
     * @return 插入条数
     */
    public int insertApiUserGroup(ApiUserGroup apiUserGroup) {
        apiUserGroup.setId(idGenerator.nextId());
        return apiUserGroupDao.insertApiUserGroup(apiUserGroup);
    }

    /**
     * 更新
     *
     * @param apiUserGroup 用户对象
     * @return 更新条数
     */
    public int updateApiUserGroup(ApiUserGroup apiUserGroup) {
        return apiUserGroupDao.updateApiUserGroup(apiUserGroup);
    }

    /**
     * 更新为删除
     *
     * @param groupId 项目组ID
     * @param userId  用户ID
     * @return 更新条数
     */
    public int updateToDelete(Long groupId, Long userId) {
        return apiUserGroupDao.updateToDelete(groupId, userId);
    }

    /**
     * 更新为删除
     *
     * @param groupId 项目组ID
     * @param userId  用户ID
     * @param auth    权限
     * @return 更新条数
     */
    public int updateAuth(Long groupId, Long userId, Integer auth) {
        return apiUserGroupDao.updateAuth(groupId, userId, auth);
    }

    /**
     * 移除项目组内用户
     *
     * @param groupId 项目组ID
     * @param userId  用户ID
     * @return 修改结果
     */
    public int removeUser(Long groupId, Long userId) {
        return apiUserGroupDao.removeUser(groupId, userId);
    }

    /**
     * 根据用户ID查询
     *
     * @param userId 用户ID
     * @return 查询到的数据
     */
    public List<UserAuthVO> selectUserAuthByUserId(Long userId) {
        return apiUserGroupDao.selectUserAuthByUserId(userId);
    }

    /**
     * 根据用户ID和组ID查询权限
     *
     * @param userId  用户ID
     * @param groupId 组ID
     * @return 权限
     */
    public String selectAuthByUserIdAndGroupId(Long userId, Long groupId) {
        return apiUserGroupDao.selectAuthByUserIdAndGroupId(userId, groupId);
    }

    /**
     * 根据项目组ID查询其他组非超级管理员用户
     *
     * @param groupId 项目组ID
     * @return 用户列表
     */
    public List<UserInfoVO> selectUserInfoForAddGroup(Long groupId) {
        return apiUserGroupDao.selectUserInfoForAddGroup(groupId);
    }

    /**
     * 根据用户ID查询项目组
     *
     * @param userId 用户ID
     * @return 项目组集合
     */
    public List<ProjectGroupVO> selectUserGroups(Long userId) {
        return apiUserGroupDao.selectUserGroups(userId);
    }
}
